Computing systems are ever more capable of highly efficient processing of computation jobs. Computational jobs often include many tasks, with various dependencies, and some capable of being performed in parallel. A task is a basic unit of execution that can be scheduled to be performed, and thus ultimately performed, on a server. Conventional server clusters can often handle thousands of task requests per second. The tasks are diverse in nature, with a variety of characteristics in terms of data volume to process, complexity of computation logic, degree of parallelism, and resource requirements.
Often, an entire cluster of servers is available and shared for performing a large number of computational jobs. As tasks are ready for execution given the current state of the computational job, the task is assigned to one of the servers for execution. Task by task, the job progresses with the aim of completion of the job, and with different servers contributing to completion of the job. Conventional scheduling technologies have been developed in order to track task dependencies, job progress, and identify suitable servers for executing tasks as the task becomes ready for execution.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.